home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994…tember: Reference Library / Dev.CD Sep 94.toast / Periodicals / develop / develop Issue 16 / develop 16 code / CollaboDraw / aevt.c next >
Encoding:
C/C++ Source or Header  |  1993-08-24  |  5.7 KB  |  260 lines  |  [TEXT/MPS ]

  1. /*-------------------------------------------------------------------------------------
  2.  *
  3.  * Simple Sample PowerTalk Application Framework
  4.  *
  5.  * ©1991-1993 Apple Computer
  6.  *
  7.  -------------------------------------------------------------------------------------*/
  8. /*
  9.  * aevt.c -- appleevents code
  10.  *
  11.  * change history:
  12.  *
  13.  * SJF        08/23/93        1.0f1        update to final headers, fix comments
  14.  * SJF        04/21/93        1.0b2        update to b2
  15.  * SJF        03/01/93        1.0b1        added digital signatures
  16.  * SJF        02/09/93        1.0b1        update to b1
  17.  * SJF        10/13/92        1.0d4        update to a11
  18.  * SJF        09/09/92        1.0d3        update to a9
  19.  * SJF        05/07/92        1.0d2        update to a6
  20.  * SJF        11/06/91        1.0d1        initial coding
  21.  *
  22.  */
  23.  
  24. #ifndef __TYPES__
  25. #include <Types.h>
  26. #endif
  27.  
  28. #ifndef __MENUS__
  29. #include <Menus.h>
  30. #endif
  31.  
  32. #ifndef __GESTALTEQU__
  33. #include <GestaltEqu.h>
  34. #endif
  35.  
  36. #ifndef __APPLEEVENTS__
  37. #include <AppleEvents.h>
  38. #endif
  39.  
  40. #ifndef __OCESTANDARDMAIL__
  41. #include <OCEStandardMail.h>
  42. #endif
  43.  
  44. #include "const.h"
  45. #include "myevents.h"
  46. #include "mytypes.h"
  47. #include "globals.h"
  48. #include "utils.h"
  49. #include "commands.h"
  50.  
  51. #include "aevt.h"
  52.  
  53. /* returns true if AppleEvents are available */
  54.  
  55. Boolean SupportsAEVT(void)
  56. {
  57.     OSErr err;
  58.     long response;
  59.     
  60.     err = Gestalt(gestaltAppleEventsAttr,&response);
  61.     if (err!=noErr)
  62.         return false;
  63.         
  64.     return (response && (response << gestaltAppleEventsPresent));
  65. }
  66.  
  67.  
  68. /* called to process a high level event */
  69.  
  70. void DoHighLevelEvent(EventRecord *ev)
  71. {
  72.     AEProcessAppleEvent(ev);    
  73. }
  74.  
  75.  
  76. /* register our AppleEvent handlers */
  77.  
  78. void RegisterMyEvents(void)
  79. {
  80.     OSErr err;
  81.     
  82.     if (!SupportsAEVT())
  83.         return;
  84.     
  85.     err = AEInstallEventHandler(kCoreEventClass,kAEOpenApplication,(ProcPtr)&MyAEHandleOAPP,
  86.                                 0L,false);
  87.     if (err!=noErr)
  88.         return;
  89.                 
  90.     err = AEInstallEventHandler(kCoreEventClass,kAEOpenDocuments,(ProcPtr)&MyAEHandleODOC,
  91.                                 0L,false);
  92.     if (err!=noErr)
  93.         return;
  94.                 
  95.     err = AEInstallEventHandler(kCoreEventClass,kAEPrintDocuments,(ProcPtr)&MyAEHandlePDOC,
  96.                                 0L,false);
  97.     if (err!=noErr)
  98.         return;
  99.                 
  100.     err = AEInstallEventHandler(kCoreEventClass,kAEQuitApplication,(ProcPtr)&MyAEHandleQUIT,
  101.                                 0L,false);
  102.     if (err!=noErr)
  103.         return;            
  104. }
  105.  
  106.  
  107. /* our OpenApplication handler - make a new window */
  108.  
  109. pascal OSErr MyAEHandleOAPP(AppleEvent *theAppleEvent,AppleEvent *reply,long refCon)
  110. {
  111.     #pragma unused (reply,refCon)
  112.     OSErr err;
  113.  
  114.     CommNew();    // since we were opened without a document, we should make an empty one
  115.     
  116.     err = MyGotRequiredParams(theAppleEvent);
  117.     if (err!=noErr)
  118.         return err;
  119. }
  120.  
  121.  
  122. /* our OpenDocument handler - open the documents */
  123.  
  124. pascal OSErr MyAEHandleODOC(AppleEvent *theAppleEvent,AppleEvent *reply,long refCon)
  125. {
  126.     #pragma unused (reply,refCon)
  127.     FSSpec myFSS;
  128.     AEDescList docList;
  129.     OSErr err;
  130.     long index,itemsInList;
  131.     Size actualSize;
  132.     AEKeyword keywd;
  133.     DescType returnedType;
  134.     Size size;
  135.     Boolean diskForm;
  136.     LetterSpec myLetterSpec;
  137.     
  138.     err = AEGetParamDesc(theAppleEvent,keyDirectObject,typeAEList,&docList);
  139.     if (err!=noErr)
  140.         return err;
  141.     
  142.     err = MyGotRequiredParams(theAppleEvent);
  143.     if (err!=noErr)
  144.         return err;
  145.     
  146.     AECountItems(&docList,&itemsInList);
  147.     for (index=1; index<=itemsInList; index++) {
  148.         err = AESizeOfNthItem(&docList, index, &returnedType, &size);
  149.         if (err!=noErr)
  150.             return err;
  151.  
  152.         if (returnedType == typeLetterSpec) {
  153.             diskForm = false;
  154.             err = AEGetNthPtr(&docList,index,typeLetterSpec,&keywd,&returnedType,
  155.                             (Ptr)&myLetterSpec,sizeof(LetterSpec),&actualSize);
  156.         } else if ((returnedType == typeAlias) || (returnedType == typeFSS)) {
  157.             diskForm = true;
  158.             err = AEGetNthPtr(&docList,index,typeFSS,&keywd,&returnedType,(Ptr)&myFSS,
  159.                             sizeof(myFSS),&actualSize);
  160.         }
  161.  
  162.         if (err!=noErr)
  163.             return err;
  164.         
  165.         if ((returnedType==typeLetterSpec) || (returnedType==typeAlias) ||
  166.                 (returnedType == typeFSS)) {
  167.             err = HandleOpenDoc(diskForm, &myFSS, &myLetterSpec);
  168.             if (err!=noErr)
  169.                 return err;
  170.         }
  171.     }
  172.     err = AEDisposeDesc(&docList);
  173.     return noErr;
  174. }
  175.  
  176.  
  177. /* our PrintDocument handler - print the documents */
  178.  
  179. pascal OSErr MyAEHandlePDOC(AppleEvent *theAppleEvent,AppleEvent *reply,long refCon)
  180. {
  181.     #pragma unused (reply,refCon)
  182.     FSSpec myFSS;
  183.     AEDescList docList;
  184.     OSErr err;
  185.     long index,itemsInList;
  186.     Size actualSize;
  187.     AEKeyword keywd;
  188.     DescType returnedType;
  189.     Size size;
  190.     Boolean diskForm;
  191.     LetterSpec myLetterSpec;
  192.     
  193.     err = AEGetParamDesc(theAppleEvent,keyDirectObject,typeAEList,&docList);
  194.     if (err!=noErr)
  195.         return err;
  196.     
  197.     err = MyGotRequiredParams(theAppleEvent);
  198.     if (err!=noErr)
  199.         return err;
  200.     
  201.     err = AECountItems(&docList,&itemsInList);
  202.     for (index=1; index<=itemsInList; index++) {
  203.         err = AESizeOfNthItem(&docList, index, &returnedType, &size);
  204.         if (err!=noErr)
  205.             return err;
  206.  
  207.         if (returnedType == typeLetterSpec) {
  208.             diskForm = false;
  209.             err = AEGetNthPtr(&docList,index,typeLetterSpec,&keywd,&returnedType,
  210.                             (Ptr)&myLetterSpec,sizeof(LetterSpec),&actualSize);
  211.         } else {
  212.             diskForm = true;
  213.             err = AEGetNthPtr(&docList,index,typeFSS,&keywd,&returnedType,(Ptr)&myFSS,
  214.                             sizeof(myFSS),&actualSize);
  215.         }
  216.  
  217.         if (err!=noErr)
  218.             return err;
  219.             
  220.         err = HandlePrintDoc(diskForm, &myFSS, &myLetterSpec);
  221.         if (err!=noErr)
  222.             return err;
  223.     }
  224.     err = AEDisposeDesc(&docList);
  225.     return noErr;
  226. }
  227.  
  228.  
  229. /* our QuitApplication handler */
  230.  
  231. pascal OSErr MyAEHandleQUIT(AppleEvent *theAppleEvent,AppleEvent *reply,long refCon)
  232. {
  233.     #pragma unused (reply,refCon)
  234.     OSErr err;
  235.     
  236.     err = MyGotRequiredParams(theAppleEvent);
  237.     if (err!=noErr)
  238.         return err;
  239.     
  240.     gDone = true;
  241. }
  242.  
  243.  
  244. /* make sure we got all of the required parameters */
  245.  
  246. OSErr MyGotRequiredParams(AppleEvent *theAppleEvent)
  247. {
  248.     DescType returnedType;
  249.     Size actualSize;
  250.     OSErr err;
  251.     
  252.     err = AEGetAttributePtr(theAppleEvent,keyMissedKeywordAttr,typeWildCard,
  253.                             &returnedType,nil,0,&actualSize);
  254.     if (err == errAEDescNotFound)
  255.         err = noErr;
  256.     else if (err==noErr)
  257.         err = errAEEventNotHandled;
  258.     return err;
  259. }
  260.